"""
异常处理-什么是异常
    编译时异常和运行时异常
        编译不通过，页面飘红的异常就是编译时异常-error
        编译通过但是运行到这里不符合逻辑，抛出异常导致程序停止就叫运行时异常 -excption
    java里面也能异常处理类来处理异常，捕捉异常并且处理异常，让程序不程序停止
    python也要异常处理来处理可能出现的异常
"""
"""
python异常处理 和java一样 try catch finally
python写法:
    try:
    
    except:异常
    
    finally
最终都会执行的逻辑
"""

try:
    print("开始运行代码")
    print(10/0)
except:
    print("程序出现异常")
else:
    print("程序没有出现异常")
finally:
    print("都会执行")

"""
异常的传播-try和throw异常
    java抛出异常关键字 throw和throws 
    python抛出异常关键字 raise
如果里面有写try，那么异常不会传播了，这是在当前的作用域
    如果没有写try,那么异常会被抛出，谁调用就谁报出异常，一直最后抛到有try的地方，
    如果一直没有处理就会抛到全局作用域让程序停止
"""
def try_exc():
    try:
        print("开始执行逻辑")
        print(10/0)
    except Exception  as e:
        print("程序出现异常",e)
    else:
        print("带啊吗执行123")

def throw_exc():
    print(10/0)

try_exc()
# throw_exc()
def add_res(a,b):
    res=0
    if a<0 or b<0:
        raise Exception("复数不能参与加法")
    return res;
# add_res(1,-2)
"""
异常类-在exception标准库中 里面有空指针 数组越界 classNotFound 没有初始化等相关异常
    异常处理如果不写异常名称，就会捕获所有异常。人如果跟指定异常名称，那么就捕获该类型异常
"""

"""
自定义异常类处理异常
    写一个类继承Exception就能做自定义异常
"""
class app_exception(Exception):
    # 这里可以写处理逻辑
    pass

def add_my_res(a,b):
    res=0
    if a<0 or b<0:
        raise app_exception("复数不能参与加法")
    return res;
add_my_res(1,-2)